'''
判断回文字符串
双指针，如果两指针相同，则分别前进一位，如果不同，就返回false
'''

def Palindrome1(s):
    l, r = 0, len(s) - 1
    while l <= r:
        if s[r] != s[l] or s[r] == ' ' or s[l] == ' ':
            return False
        r -= 1
        l += 1
    return True
print(Palindrome1('waw')) # True
print(Palindrome1('waaw'))# True
print(Palindrome1('wabw'))# False
print(Palindrome1('    '))# False
'''
时间复杂度是O(n)：遍历一遍字符串就可以获得答案
空间复杂度是O(1)，双指针没有用到额外的空间
10分钟
'''

'''
递归的思想
对数组进行首位一位的切片，递归判断切片的部分是不是相等
'''
def Palindrome2(s):
    # 终止条件
    if not s:
        return True
    # 递归 s去掉首位两个数字
    while s:
        if s[0] != s[-1] or s[0] == ' ' or s[-1] == ' ':
            return False
        else:
            return Palindrome2(s[1:-1])


print(Palindrome2('waw')) # True
print(Palindrome2('waaw'))# True
print(Palindrome2('wabw'))# False
print(Palindrome2('    '))# False
# s = 'wabw'
# print(s[0]==s[-1])
'''
时间复杂度是O(n)：遍历一遍字符串就可以获得答案
空间复杂度是O(1)：直接对原来的字符串切片所以不需要额外的空间
10分钟
'''

'''
连续重复出现次数最多的字符及其对应的次数
'''
def getRepeat(s):
    # 利用字典记录一下最大值对应的数字
    repeatVal = {}
    # 记录最多出现的次数
    maxRepeat = -1
    count = 1
    for i in range(len(s)-1):
        if s[i] == s[i+1]:
            count += 1
        # 若果下一个字符不一样，计数从1开始重新计
        elif s[i] != s[i+1]:
            count = 1
        maxRepeat = max(count,maxRepeat)
        repeatVal[maxRepeat] = s[i+1]
    return maxRepeat,repeatVal[maxRepeat]
print(getRepeat('111123432432534cccccccccccccc'))# (14, 'c')

'''
15分钟
总计用时35分钟
'''